﻿Public Class Caballo
    Dim posicionX As Integer
    Dim posicionY As Integer
    Dim pos_Prox(2, 8) As Integer
    Public Sub Caballo(ByVal fila As Integer, ByVal columna As Integer)
        posicionX = fila
        posicionY = columna
        ArribaIzq(fila, columna) 'cuando se crea el objeto Tiene q saber en q posición esta ubicada y saber q posiciónes puede ocupar 
        ArribaDer(fila, columna)
        DerechaAr(fila, columna)
        DerechaAb(fila, columna)
        IzquierdaAb(fila, columna)
        IzquierdaAr(fila, columna)
        AbajoDer(fila, columna)
        AbajoIzq(fila, columna)
    End Sub

    Private Sub ArribaIzq(ByVal fila As Integer, ByVal columna As Integer)
        If (columna = "a") Or (fila >= 7) Then
            posicionX = fila
            posicionY = columna
        Else
            fila = fila + 2
            columna = columna - 1
            pos_Prox(1, 2) = fila
            pos_Prox(2, 2) = columna
        End If
    End Sub

    Private Sub ArribaDer(ByVal fila As Integer, ByVal columna As Integer)
        If (columna = "h") Or (fila >= 7) Then
            posicionX = fila
            posicionY = columna
        Else
            fila = fila + 2
            columna = columna + 1
            pos_Prox(1, 1) = fila
            pos_Prox(2, 1) = columna
        End If
    End Sub

    Private Sub DerechaAr(ByVal fila As Integer, ByVal columna As Integer)
        If (columna = "g") Or (fila = 8) Then
            posicionX = fila
            posicionY = columna
        Else
            fila = fila + 2
            columna = columna + 1
            pos_Prox(1, 5) = fila
            pos_Prox(2, 5) = columna
        End If
    End Sub

    Private Sub IzquierdaAr(ByVal fila As Integer, ByVal columna As Integer)
        If (columna = "a") Or (fila = 8) Then
            posicionX = fila
            posicionY = columna
        Else
            fila = fila - 2
            columna = columna + 1
            pos_Prox(1, 7) = fila
            pos_Prox(2, 7) = columna
        End If
    End Sub

    Private Sub AbajoDer(ByVal fila As Integer, ByVal columna As Integer)
        If (columna = "h") Or (fila <= 2) Then
            posicionX = fila
            posicionY = columna
        Else
            fila = fila - 2
            columna = columna + 1
            pos_Prox(1, 4) = fila
            pos_Prox(2, 4) = columna
        End If
    End Sub

    Private Sub AbajoIzq(ByVal fila As Integer, ByVal columna As Integer)
        If (columna = "a") Or (fila <= 2) Then
            posicionX = fila
            posicionY = columna
        Else
            fila = fila - 2
            columna = columna - 1
            pos_Prox(1, 3) = fila
            pos_Prox(2, 3) = columna
        End If
    End Sub

    Private Sub IzquierdaAb(ByVal fila As Integer, ByVal columna As Integer)
        If (columna <= "b") Or (fila = 1) Then
            posicionX = fila
            posicionY = columna
        Else
            fila = fila - 1
            columna = columna - 2
            pos_Prox(1, 8) = fila
            pos_Prox(2, 8) = columna
        End If
    End Sub

    Private Sub DerechaAb(ByVal fila As Integer, ByVal columna As Integer)
        If (columna <= "g") Or (fila = 1) Then
            posicionX = fila
            posicionY = columna
        Else
            fila = fila - 1
            columna = columna + 2
            pos_Prox(1, 6) = fila
            pos_Prox(2, 6) = columna
        End If
    End Sub

    Public Function Mover(ByVal fila As Integer, ByVal columna As Integer) As Boolean
        Mover = False
        Dim j As Integer
        For j = 1 To 8
            If pos_Prox(1, j) = fila And pos_Prox(2, j) = columna Then
                Mover = True
                ArribaIzq(fila, columna) 'cuando se mueve tiene q recalcular 
                ArribaDer(fila, columna) 'sabe donde esta Y donde puede ir
                DerechaAr(fila, columna)
                DerechaAb(fila, columna)
                IzquierdaAb(fila, columna)
                IzquierdaAr(fila, columna)
                AbajoDer(fila, columna)
                AbajoIzq(fila, columna)
            End If
        Next
      
        Return Mover
       
    End Function
End Class
